home *** CD-ROM | disk | FTP | other *** search
/ Crack It! / Crack It!.iso / CONTENT / DISKEDIT / ABSDISK.ASM next >
Assembly Source File  |  1996-09-09  |  3KB  |  119 lines

  1. ;***
  2. ;
  3. ;ABSDISK.ASM - assembly routines for absolute disk sector access
  4. ;(C)Copyright Gerard Paul Java 1996
  5.  
  6.  
  7. .MODEL TPASCAL
  8.  
  9. .DATA
  10.  
  11. CONTROL_PACKET    LABEL    WORD
  12. SECTOR_NUM_LOW    DW    ?
  13. SECTOR_NUM_HI    DW    ?
  14. NUM_SECTORS    DW    ?
  15. BUF_OFFSET    DW    ?
  16. BUF_SEGMENT    DW    ?
  17.  
  18.  
  19. .CODE
  20.  
  21. PUBLIC        AbsRead
  22. PUBLIC        AbsWrite
  23. PUBLIC        AugAbsRead
  24. PUBLIC        AugAbsWrite
  25.  
  26. AbsRead        PROC    FAR    rDrive: BYTE,rStartSec: WORD,rNumSec: WORD,rBufAddr: DWORD,rErrAddr: DWORD
  27.         PUSH    DS
  28.         MOV    AL,rDrive
  29.         MOV    DX,rStartSec
  30.         MOV    CX,rNumSec
  31.         LDS     BX,rBufAddr
  32.         INT    25H
  33.         LES    DI,rErrAddr
  34.         JNC    NO_ERROR
  35.                 CMP     AX,0207H
  36.                 JE      NO_CAN_DO
  37.         MOV    BYTE PTR ES:[DI],AL
  38.         MOV    BYTE PTR ES:[DI+1],1
  39.                 JMP     OVER
  40. NO_CAN_DO:      MOV     WORD PTR ES:[DI],0FFFFH
  41.         JMP    OVER
  42. NO_ERROR:    MOV    WORD PTR ES:[DI],0
  43. OVER:        POPF
  44.         POP    DS
  45.         RET
  46. AbsRead        ENDP
  47.  
  48. AbsWrite    PROC    FAR    wDrive: BYTE,wStartSec: WORD,wNumSec: WORD,wBufAddr: DWORD,wErrAddr: DWORD
  49.         PUSH    DS
  50.         MOV    AL,wDrive
  51.         MOV     DX,wStartSec
  52.         MOV    CX,wNumSec
  53.         LDS    BX,wBufAddr
  54.         INT    26H
  55.         LES    DI,wErrAddr
  56.         JNC    wNO_ERROR
  57.         MOV    BYTE PTR ES:[DI],AL
  58.         MOV    BYTE PTR ES:[DI+1],1
  59.         JMP    wOVER
  60. wNO_ERROR:    MOV    WORD PTR ES:[DI],0
  61. wOVER:        POPF
  62.         POP    DS
  63.         RET
  64. AbsWrite    ENDP
  65.  
  66. AugAbsRead    PROC    FAR    arDrive: BYTE,arStartSec: DWORD,arNumSec: WORD,arBufAddr: DWORD,arResult: DWORD
  67.         PUSH    DS
  68.         MOV    AL,arDrive
  69.         MOV    CX,0FFFFH
  70.         MOV    BX,OFFSET CONTROL_PACKET
  71.         LES    SI,arStartSec
  72.         MOV     SECTOR_NUM_LOW,SI
  73.         MOV    SECTOR_NUM_HI,ES
  74.         MOV    DX,arNumSec
  75.         MOV     NUM_SECTORS,DX
  76.         LES    SI,arBufAddr
  77.         MOV    BUF_OFFSET,SI
  78.         MOV    BUF_SEGMENT,ES
  79.         INT    25H
  80.         LES    DI,arResult
  81.         JNC    arNO_ERROR
  82.         MOV    BYTE PTR ES:[DI],AL
  83.         MOV    BYTE PTR ES:[DI+1],1
  84.         JMP    arOVER
  85. arNO_ERROR:    MOV    WORD PTR ES:[DI],0
  86. arOVER:        POPF
  87.         POP    DS
  88.         RET
  89. AugAbsRead    ENDP
  90.  
  91. AugAbsWrite    PROC    FAR    awDrive: BYTE,awStartSec: DWORD,awNumSec: WORD,awBufAddr: DWORD,awResult: DWORD
  92.                 PUSH    DS
  93.                 MOV     AL,awDrive
  94.                 MOV     BX,OFFSET CONTROL_PACKET
  95.                 MOV     CX,0FFFFH
  96.                 LES     SI,awStartSec
  97.                 MOV     SECTOR_NUM_LOW,SI
  98.                 MOV     SECTOR_NUM_HI,ES
  99.                 MOV     DX,awNumSec
  100.                 MOV     NUM_SECTORS,DX
  101.                 LES     SI,awBufAddr
  102.                 MOV     BUF_OFFSET,SI
  103.                 MOV     BUF_SEGMENT,ES
  104.                 INT     26H
  105.                 LES     DI,awResult
  106.                 JNC     awNO_ERROR
  107.                 MOV     BYTE PTR ES:[DI],AL
  108.                 MOV     BYTE PTR ES:[DI+1],1
  109.                 JMP     awOVER
  110. awNO_ERROR:     MOV     WORD PTR ES:[DI],0
  111. awOVER:         POPF
  112.         POP    DS
  113.         RET
  114. AugAbsWrite    ENDP
  115.  
  116.         END
  117.  
  118.  
  119.